package controller;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import manager.LoginManager;

import com.mysql.jdbc.Connection;

public class LoginController {
	@FXML
	private Button touche1;
	@FXML
	private Button touche2;
	@FXML
	private Button touche3;
	@FXML
	private Button touche4;
	@FXML
	private Button touche5;
	@FXML
	private Button touche6;
	@FXML
	private Button touche7;
	@FXML
	private Button touche8;
	@FXML
	private Button touche9;
	@FXML
	private Button touche0;
	@FXML
	private Button touche00;
	@FXML
	private TextField utilisateur;
	@FXML
	private TextField motDePasse;
	@FXML
	private Button annulerButton;
	@FXML
	private Button identifierButton;
	@FXML
	private Button configurerButton;
	@FXML
	private Object varButtonTemp;
 	public String ConnectionType = "";
	public LoginManager LoginManagerTemp;

	public void initialize() {
	}

	@FXML
	public void identificationBouton(final LoginManager loginManager) {
		identifierButton.setOnAction(new EventHandler<ActionEvent>() {
			public void handle(ActionEvent event) {
 				String sessionID = authorize();
				if (sessionID != null) {
					Connection cn = Connexion.connect();
					String param = utilisateur.getText();
					String s2 = null;
					String sql = "SELECT * FROM  `caisse.users`  WHERE login="+ "'" + param + "'";
					Statement pstmnt;
					try {
						pstmnt = cn.createStatement();
						ResultSet rs = pstmnt.executeQuery(sql);
						while (rs.next()) {
							s2 = rs.getString("prenom");
						}
						pstmnt.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					loginManager.afficherCaisse(sessionID, s2);
				}
			}
		});
	}

	@FXML
	public void configurationBouton(final LoginManager loginManager) {
		configurerButton.setOnAction(new EventHandler<ActionEvent>() {
			public void handle(ActionEvent event) {
				loginManager.afficherConf(""+sessionID, "user");
			}
		});
	}

	public void initManager(final LoginManager loginManager) {
		System.out.println("ConnectionType ::: last : " + ConnectionType);
		
		identificationBouton(loginManager);
		configurationBouton(loginManager);
	}

	public void gestionToucheClavier() {
		touche1.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche1.getText());
				} else {
					utilisateur.setText(touche1.getText());
				}
			}
		});
		touche2.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche2.getText());
				} else {
					utilisateur.setText(touche2.getText());
				}
			}
		});
		touche3.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche3.getText());
				} else {
					utilisateur.setText(touche3.getText());
				}
			}
		});
		touche4.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche4.getText());
				} else {
					utilisateur.setText(touche4.getText());
				}
			}
		});
		touche5.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche5.getText());
				} else {
					utilisateur.setText(touche5.getText());
				}
			}
		});
		touche6.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche6.getText());
				} else {
					utilisateur.setText(touche6.getText());
				}
			}
		});
		touche7.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche7.getText());
				} else {
					utilisateur.setText(touche7.getText());
				}
			}
		});
		touche8.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche8.getText());
				} else {
					utilisateur.setText(touche8.getText());
				}
			}
		});
		touche9.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche9.getText());
				} else {
					utilisateur.setText(touche9.getText());
				}
			}
		});
		touche0.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche0.getText());
				} else {
					utilisateur.setText(touche0.getText());
				}
			}
		});
		touche00.setOnAction(new EventHandler<ActionEvent>() {

			public void handle(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!"".equals(utilisateur)) {
					utilisateur.setText(utilisateur.getText()
							+ touche00.getText());
				} else {
					utilisateur.setText(touche00.getText());
				}
			}
		});
	}

	/**
	 * Check authorization credentials.
	 * 
	 * If accepted, return a sessionID for the authorized session otherwise,
	 * return null.
	 */
	private String authorize() {
		Connection cn = Connexion.connect();
		String param = utilisateur.getText();
		String s1 = null, s2;
		String sql = "SELECT * FROM  `caisse.users`  WHERE login="
				+ "'" + param + "'";
		Statement pstmnt;
		try {
			pstmnt = cn.createStatement();
			ResultSet rs = pstmnt.executeQuery(sql);

			while (rs.next()) {
				s1 = generateSessionID();

			}

			pstmnt.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return s1;
	}

	private static int sessionID = 0;

	private String generateSessionID() {
		sessionID++;
		return "xyzzy - session " + sessionID;
	}

}
